Признак | attribute

Любой объект характеризуется определённым набором признаков: лёгкий - тяжёлый, высокий - низкий, горячий или зелёный, и т.д. Признаки влияют на поведение объекта в игре - тяжёлое невозможно поднять, горячим можно обжечься. При этом, признаки можно абстрагировать от предмета и говорить о них как о самостоятельных понятиях. Для признаков можно построить отдельное классовое дерево: синее и красное это цвет, большое и маленькое - размер.

С программной точки зрения, признак объекта - это свойство булевого типа, имеющее осмысленное имя. Для управления одноимёнными булевыми свойствами вводятся классы специального типа - признак|attribute, соответствующие абстрагированным от объектов признакам.
В терминологии ООП признак|attribute - это классы, экземплярами которых являются не объекты, а их логические свойства.

attribute

Конструктор

Для создания признака используется синтаксис:

признак|attribute  <attr_name>
{ //описание признака
  [свойства]
  [код конструктора]
  [методы]
}

где:
признак|attribute - ключевой слово, указывающее тип создаваемого объекта.
attr_name - имя создаваемого признака (идентификатор).

Пример:

attribute надето
{ //описание признака
  @на_персонаже
  @@состояние
  property падеж = #Вп
  property _описание_персонажа = "{$одет*#Кф*$$} в" 
}

Установка признаков: стандартный синтаксис

Подобно прочим свойствам, признак объекта может быть установлен следующим выражением:

X.зеленое = да  //Ok, объект Х теперь зелёный
X.зеленое = нет //Ok, объект Х больше не зелёный

Внутри конструктора объекта установить признак можно так:

X
{ //конструктор объекта Х
  property зеленое = да //Ok, объект Х теперь зелёный
}

Установка признаков: нестандартный синтаксис

Исключительно для признаков действует специальный синтаксис выражений:

X зеленое    //Ok, объект Х теперь зелёный
X не зеленое //Ok, объект Х больше не зелёный

И внутри конструктора:

X
{ //конструктор объекта Х
  зеленое //Ok, объект Х теперь зелёный
}
to do:
Дописать.